package com

import (
	"fmt"
	"odm/config"
	"odm/model"
	"os"
)

// initDirs initialize dirs
func initDirs(dirs ...string) {
	for _, dir := range dirs {
		fmt.Printf("   - 创建目录：%s\n", dir)
		os.RemoveAll(dir)
		os.MkdirAll(dir, 0755)
		os.Chmod(dir, 0755)
	}
}

func Install() {
	conf := config.Defalut()
	// 初始化目录
	fmt.Println("====================== setup start ... =====================")
	fmt.Println(" 1.初始化目录开始...")
	initDirs("log", "data", "system")

	// 初始化表
	fmt.Printf("   初始化目录成功...\n\n")
	fmt.Println(" 2.初始化表开始...")
	model.InitTables(conf.GetString("data.file"))
	fmt.Printf("   初始化表成功...\n\n")

	// 初始化数据
	fmt.Println(" 3.初始化数据开始...")

	// 获取密码
	password, salt, err := GetPassword("admin-a1s2d3", false)
	if err != nil {
		panic("密码获取失败:" + err.Error())
	}

	// 创建管理用户
	if err := model.CreateAdmin(salt, password); err != nil {
		panic(err.Error())
	}
	fmt.Println("   - 创建管理用户: admin")
	fmt.Printf("   初始化数据成功...\n\n")

	// 生成密钥
	fmt.Println(" 4.生成密钥开始...")
	if err := GenRSAKey(1024); err != nil {
		panic("生成密钥失败:" + err.Error())
	}
	fmt.Println("   - 公钥：./dist/data/public.pem")
	fmt.Println("   - 私钥：./dist/data/private.pem")
	fmt.Printf("   生成密钥成功...\n")
	fmt.Println("====================== setup end ...   =====================")
}

// Usage function show scn usage
func Usage() {
	fmt.Println("odm is a web server.")
	fmt.Println("Usage:")
	fmt.Println("       odm <command> [option] [argument]")
	fmt.Println("The commands are:")
	fmt.Println("       init            -- init  odm app")
	fmt.Println("       serve           -- start odm server")
	fmt.Println("The options are:")
	fmt.Println("       init  [option] [argument]:")
	fmt.Println("              -f file  -- config yaml file")
	fmt.Println("       serve [option] [argument]:")
	fmt.Println("              -h host  -- web server of host (default argument: 0.0.0.0)")
	fmt.Println("              -p port  -- web server of port (default argument: 5000)")
	fmt.Println("              -f file  -- config yaml file")
}
